define(['moment', 'module/system/service/WatchDogService'], function () {
    // 20230504 modify by Alan for#134286: 未引入$rootscope
    return ['$scope', '$filter', '$mdDialog', '$stateParams', 'config', 'MMWService', '$timeout', 'WatchDogService', '$mdlToast', '$calculater', '$rootScope',
    function ($scope, $filter, $mdDialog, $stateParams, config, $MMWService, $timeout, $WatchDogService, $mdlToast, $calculater, $rootScope) {
        // 20230302 add by Alan for#127562 : 掃碼異常訊息3秒後關閉
        var options = { delay: 3 };
        $scope.init = function(){
            $scope.mode = 'setting'; // 頁面切換

            // 包裝設定頁面基礎資料
            $scope.settingList = {
                area_no: '', // 生產線編號
                area_name: '', // 生產線名稱
                op_no: '', // 作業站編號
                op_name: '', // 作業站名稱
                package_mode: '0', // 包裝模式 → 0:序號 ; 1:生產批號
                external_mode:'0'  //外部條碼模式 0 = 關閉  1 = 開啟
            };
        };
        $scope.back = function(){
            $scope.$root.hideMenu();
            $scope.$root.changeProgram('home', true);
        };

        // 包裝設定頁面 -- start

        // 生產線開窗
        $scope.loadAreaNo = function(){
            $scope.$root.showQueryList({
                key:'areano',
                header : [
                    {label:$filter('translate')('common.queryList.area_c'), code:'areano'}, // 生產線編號
                    {label:$filter('translate')('common.queryList.area_n'), code:'areaname'} // 生產線名稱
                ],
                query: function(conditions, feedback){
                    $MMWService.pageNumberInfoGet({
                        page_mode : 'package_area_no_info',
                        query_condition_info : []
                    }, function (response) {
                        if(response && response.length > 0){
                            feedback(response);
                        } else {
                            // 無進站生產批或作業站屬性不正確！
                            $scope.$root.showAlert($filter('translate')('B1401.showAlert.column12'));
                        }
                    });
                },
                selectCode: $scope.settingList.area_no,
                confirm: function(selectItem, dialog){
                    $scope.settingList.area_no = selectItem.areano; // 生產線編號
                    $scope.settingList.area_name = selectItem.areaname; // 生產線名稱
                    $scope.settingList.op_no = ''; // 作業站編號
                    $scope.settingList.op_name = ''; // 作業站編號
                    $scope.loadOpNo(); // 作業站開窗
                    dialog.hide();
                }
            });
        };

        // 作業站開窗
        $scope.loadOpNo = function(){
            if(!$scope.settingList.area_no){ // 生產線編號
                // 請先選擇生產線！
                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column1'));
            } else {
                $MMWService.showQueryListPNIG({
                    page_mode: 'package_op_no_info',
                    header: [
                        {label:$filter('translate')('common.queryList.op_c'), code:'opno'}, // 作業站編號
                        {label:$filter('translate')('common.queryList.op_n'), code:'opname'} // 作業站名稱
                    ],
                    setCondition:function(conditions){
                        conditions.push({column_name:'a.AREANO', query_mode:'0', value: $scope.settingList.area_no, merge_condition_model:'AND' });
                        return conditions;
                    },
                    selectCode: $scope.settingList.op_no,
                    confirm : function(selectItem){
                        $scope.settingList.op_no = selectItem.opno; // 作業站編號
                        $scope.settingList.op_name = selectItem.opno; // 作業站名稱
                    }
                });
            }
        };
        
        // 打勾切換頁面
        $scope.confirm = function(){
            if(!$scope.settingList.area_no || !$scope.settingList.op_no){ // 生產線編號 || 作業站編號
                // 尚未選取生產線或作業站！
                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column2'));
            } else {
                $scope.mode = ''; // 頁面切換
                stationPackageInit(); // 包裝作業初始化
            }
        };
        // 包裝設定頁面 -- end
        //M#94960 BY a991241234 包裝 散包開窗頁面  -- start 
        $scope.open_dispersion_package_contorl = function()
        {
            //累加 has_dispersion_qty
            var has_dispersion_qty = 0;//多次散包 或 尚未強制封箱 累計加總的數量
            for(var i in $scope.pcs_detail)
            {
                has_dispersion_qty += (+$scope.pcs_detail[i].qty);
            }
            //判斷是否開窗
            //1.檢核是否點選生產批
            //2.檢核包裝階層是否為 1
            //3.檢核剩餘可包裝數量是否超過
            //4.檢核是否有包裝數量限制
            if(typeof  $scope.selectItem === "undefined" || $scope.selectItem.length <= 0)
                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column18'));
            if($scope.stationPackage.package_level != 1)
                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column19'));
            if(($scope.selectItem.packed_qty + has_dispersion_qty) >= $scope.selectItem.qty)
                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column20'));
            if((+$scope.stationPackage.package_qty) <= 0)
                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column21'));
            $mdDialog.dialog(
                'module/moduleB/program/B14/B1401/B1401_dispersion_package.html',
                function(dialog){
                    var contorl = {
                        //開窗初始化
                        init:function(){
                            dialog.lot_item = $scope.selectItem;
                            dialog.dispersion_limit_qty = (+$scope.selectItem.qty) - (+$scope.selectItem.packed_qty); //剩餘可包裝數量(已包裝數量 - 進站數量)
                            dialog.one_package_limit_qty = (+$scope.stationPackage.package_qty);                      //包裝一箱所需要的數量
                            dialog.dispersion_def_qty = 0;                                                            //預設數量
                            dialog.has_dispersion_qty = has_dispersion_qty;                                           //多次散包 或 尚未強制封箱 累計加總的數量
                            //預數量設定
                            if(dialog.dispersion_limit_qty >= dialog.one_package_limit_qty)
                                dialog.dispersion_def_qty =  dialog.one_package_limit_qty;
                            else
                                dialog.dispersion_def_qty = dialog.dispersion_limit_qty;
                            if(dialog.has_dispersion_qty > 0)
                            {
                                if(dialog.dispersion_def_qty - dialog.has_dispersion_qty > 0)
                                    dialog.dispersion_def_qty -= dialog.has_dispersion_qty;
                                else
                                    dialog.dispersion_def_qty = 0;
                            }
                        },
                        //數量輸入檢核
                        dispersion_check_action: function(event){
                            var target = event.currentTarget;
                            angular.element(target).addClass('is-focus');
                            $calculater.open(function(num,calcDialog){
                                //輸入數量檢核
                                //1.檢核包裝數量是否超過
                                //2.檢核剩餘可包裝數量是否超過
                                if((+num)+ dialog.has_dispersion_qty > dialog.one_package_limit_qty)
                                    return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column22'));
                                if((+num)+ dialog.has_dispersion_qty > dialog.dispersion_limit_qty)
                                    return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column23'));
                                dialog.dispersion_def_qty = (+num);
                                calcDialog.hide();
                            },
                            function(calcDialog){
                                angular.element(target).removeClass('is-focus');
                                calcDialog.hide();
                            },
                            {
                                    defaultNum : dialog.dispersion_def_qty,
                                    decimal : false
                            });
                        },
                        back: function () {
                            dialog.hide();
                            $scope.input_blur();
                        },
                        //添加包裝 list
                        add_psc_detail_action:function(){
                            var has_same = false;
                            for(var i in  $scope.pcs_detail)
                            {
                                if($scope.pcs_detail[i].barcode_lot_no == dialog.lot_item.lot_no)
                                {
                                    $scope.pcs_detail[i].qty += dialog.dispersion_def_qty;
                                    has_same  = true;
                                }  
                            }
                            if(has_same == false)
                            {
                                $scope.pcs_detail.push({
                                    index: $scope.pcs_detail.length + 1, // 索引
                                    barcode_serial_no: $scope.barcode_serial_no, // 成品序號
                                    barcode_lot_no:  dialog.lot_item.lot_no, // 生產批號(序號)
                                    selected_lot_no: dialog.lot_item.lot_no, // 綁定的生產批號
                                    qty:dialog.dispersion_def_qty, // 數量
                                    order: new Date() // 控制掃描順序
                                });
                            }
                        },
                        //移除包裝 list
                        remove_psc_detail_action:function(){
                            var remove_list = [];
                            for(var i in  $scope.pcs_detail)
                            {
                                if($scope.pcs_detail[i].barcode_lot_no == dialog.lot_item.lot_no)
                                {
                                    $scope.pcs_detail[i].qty -= dialog.dispersion_def_qty;
                                    if($scope.pcs_detail[i].qty == 0)
                                        remove_list.push(i);
                                }  
                            }
                            for(var i in remove_list)
                            {
                                $scope.pcs_detail.splice(remove_list[i],1);
                            }
                        },
                        //最後送出
                        confirm: function(){
                            //檢核數量是否為零
                            if(dialog.dispersion_def_qty == 0)
                                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column25'));
                            //添加包裝
                            dialog.add_psc_detail_action();
                            //如果湊滿包裝數量 就跳Confirm 詢問是否送出
                            if(dialog.has_dispersion_qty + dialog.dispersion_def_qty == dialog.one_package_limit_qty)
                            {
                                $scope.$root.showConfirm($filter('translate')('B1401.showAlert.column24'), 
                                success = function(dialog_confirm){
                                    dialog_confirm.hide();
                                    package_info_process();
                                },
                                fail = function(dialog_confirm)
                                {
                                    dialog_confirm.hide();
                                    dialog.remove_psc_detail_action();
                                });
                            }
                            dialog.hide();
                            $scope.input_blur();
                        }
                    }
                    return contorl;
                }
            )
        }
        //M#94960 BY a991241234 包裝 散包開窗頁面  -- end
        //M#95560 BY a991241234 包裝 外部條碼 -- start 
        $scope.open_external_box_no_contorl = function(callback){
            var external_barcode = '';
            $mdDialog.dialog(
                'module/moduleB/program/B14/B1401/B1401_external_box_no.html',
                function(dialog){
                    var contorl = {
                        //開窗初始化
                        init:function(){
                            dialog.box_barcode_no = '';
                            dialog.box_reg_rule = /^[0-9a-zA-Z]+$/;
                            //focus dialog input txt
                            $timeout(function() {
                                document.getElementById('box_barcode_no').focus();
                            });
                        },
                        back: function () {
                            dialog.hide();
                            $scope.input_blur();
                        },
                        //外部條碼 QRCODE 掃描
                        external_box_barcode_action:function(){
                            $scope.$root.OpenScanner({
                                after : function(result)
                                {
                                   if(dialog.box_reg_rule.test(result.text) == false)
                                        return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column26'));
                                   if(result.text.length > 50)
                                        return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column27'));
                                   dialog.box_barcode_no = result.text;
                                },
                                exception: function(){
                                    //目前裝置無法使用相機
                                    $scope.$root.showAlert($filter('translate')('B0214.showAlert.column3'));
                                },
                                orientation : 'landscape'
                            });
                        },
                        external_box_barcode_enter:function(event){
                            if(event.keyCode == 13)
                                dialog.confirm();  
                        },
                        //最後送出
                        confirm: function(){
                            if(dialog.box_reg_rule.test(dialog.box_barcode_no) == false)
                                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column26'));
                            if(dialog.box_barcode_no.length > 50)
                                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column27'));
                            external_barcode = dialog.box_barcode_no;
                            callback(external_barcode);
                            dialog.hide();
                            $scope.input_blur();
                        }
                    }
                    return contorl;
                });
        }
         //M#95560 BY a991241234 包裝 外部條碼 -- end 
        // 包裝作業頁面初始化
        function stationPackageInit() {
            // 包裝作業基礎資料
            $scope.stationPackage = {
                user_no: '', // 人員編號
                user_name: '', // 人員名稱
                product_no_index: '', // 產品編號索引 → 目前包裝來源開窗這裡的資料重複性都太高，所以加上一個索引區分用
                product_no: '', // 產品編號
                product_ver: '', // 產品版本
                product_name: '', // 產品名稱
                product_spec: '', // 產品規格
                group_label_no: '', // 組合標籤編號	
                group_label_name: '', // 組合標籤名稱
                package_level: '', // 包裝層數
                package_name: '', // 包裝名稱
                package_description: '', // 包裝描述
                package_content: '', // 包裝內容物名稱
                package_qty: '', // 包裝數
                package_rule: '', // 包裝序號規則
                label_no: '' // 標籤編號
            };

            $scope.lotNoList = []; // 生產批號 List (左下)
            $scope.isSelectItem = false; // 是否已點選生產批號 → 顯示右邊掃描區塊
            $scope.pcs_detail = []; // 掃描序號 List (右上)
            $scope.packageBoxList = []; // 包裝序號 List (右下)
        }

        // 設定切換生產線和作業站
        $scope.setting = function(){
            $mdDialog.dialog(
                'module/moduleB/program/B14/B1401/B1401_setting.tmp.html',
                function(dialog){
                    return {
                        settingList: {
                            area_no: $scope.settingList.area_no, // 生產線編號
                            area_name: $scope.settingList.area_name, // 生產線名稱
                            op_no: $scope.settingList.op_no, // 作業站編號
                            op_name: $scope.settingList.op_name, // 作業站名稱
                            package_mode: $scope.settingList.package_mode, // 掃描模式 → 0:序號 ; 1:生產批號
                            external_mode: $scope.settingList.external_mode
                        },
                        back: function () {
                            dialog.hide();
                        },
                        loadAreaNo: function() {  // 生產線開窗
                            $MMWService.showQueryListPNIG({
                                page_mode: 'package_area_no_info',
                                header: [
                                    {label:$filter('translate')('common.queryList.area_c'), code:'areano'}, // 生產線編號
                                    {label:$filter('translate')('common.queryList.area_n'), code:'areaname'} // 生產線名稱
                                ],
                                setCondition:function(conditions){
                                    return conditions;
                                },
                                selectCode: dialog.settingList.area_no,
                                confirm : function(selectItem){
                                    dialog.settingList.area_no = selectItem.areano; // 生產線編號
                                    dialog.settingList.area_name = selectItem.areaname; // 生產線名稱
                                    dialog.settingList.op_no = ''; // 作業站編號
                                    dialog.settingList.op_name = ''; // 作業站名稱
                                    dialog.loadOpNo(); // 作業站開窗
                                }
                            });
                        },
                        loadOpNo: function() { // 作業站開窗
                            $MMWService.showQueryListPNIG({
                                page_mode: 'package_op_no_info',
                                header: [
                                    {label:$filter('translate')('common.queryList.op_c'), code:'opno'}, // 作業站編號
                                    {label:$filter('translate')('common.queryList.op_n'), code:'opname'} // 作業站名稱
                                ],
                                setCondition:function(conditions){
                                    conditions.push({column_name:'a.AREANO', query_mode:'0', value: dialog.settingList.area_no, merge_condition_model:'AND' });
                                    return conditions;
                                },
                                selectCode: dialog.settingList.op_no,
                                confirm : function(selectItem){
                                    dialog.settingList.op_no = selectItem.opno; // 作業站編號
                                    dialog.settingList.op_name = selectItem.opno; // 作業站名稱
                                }
                            });
                        },
                        confirm: function(){
                            $scope.settingList = dialog.settingList; // 包裝設定頁面基礎資料
                            stationPackageInit(); // 包裝作業頁面初始化
                            dialog.hide();
                        }
                    }
                }
            )
        };

        // 序號掃描定位
        $scope.input_blur = function(){
            // 20231024 modify by Alan for#148623: 開窗時不要focus
            if(!$scope.mode && !$mdDialog.isShow()){
                if($scope.settingList.package_mode == 0){
                    document.getElementsByClassName('input_barcode')[0].focus();
                } else {
                    document.getElementsByClassName('input_barcode')[1].focus();
                }
            }
        };

        // 20231024 modify by Alan for#148623: 關窗時回復focus
        $scope.$watch(() => $mdDialog.isShow(), (newVal, oldVal) => {
            if (newVal == false)
                $scope.input_blur();
        });

        // 畫面左右延伸
        $scope.changePanelSize = function(size_type){
            if(!$scope.machine_panel_mode){
                $scope.machine_panel_mode = size_type;
            } else {
                $scope.machine_panel_mode = undefined;
            }
        };

        // 畫面上下延伸
        $scope.changePCSSize = function(size_type){
            if($scope.isPCSSize != size_type)
                $scope.isPCSSize = size_type;
            else
                $scope.isPCSSize = '';
        };

        // 人員開窗
        $scope.loadUserNo = function(){
            $scope.$root.showQueryList({
                key:'userno',
                header : [
                    {label:$filter('translate')('common.queryList.employee_c'), code:'userno'}, // 人員編號
                    {label:$filter('translate')('common.queryList.employee_n'), code:'username'} // 人員名稱
                ],
                query: function(conditions, feedback){
                    $MMWService.pageNumberInfoGet({
                        page_mode : 'package_acc_info',
                        query_condition_info : [
                            {column_name: 'a.LOGINPLACENO', query_mode:'0', value: $scope.settingList.area_no, merge_condition_model:'AND' }
                        ]
                    }, function (response) {
                        if(response && response.length > 0){
                            feedback(response);
                        } else {
                            // 生產線工作平台無人上工！
                            $scope.$root.showAlert($filter('translate')('B1401.showAlert.column13'));
                        }
                    });
                },
                selectCode: $scope.stationPackage.user_no,
                confirm: function(selectItem, dialog){
                    $scope.stationPackage.user_no = selectItem.userno; // 人員編號
                    $scope.stationPackage.user_name = selectItem.username; // 人員名稱
                    dialog.hide();
                }
            });
        };
        
        // 包裝來源開窗
        $scope.loadPackageSource = function(){
            if(!$scope.stationPackage.user_no){ // 人員編號
                // 請先選擇人員！
                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column3'));
            } else {
                $scope.$root.showQueryList({
                    key:'product_no_index',
                    header : [
                        {label:$filter('translate')('common.queryList.item_c'), code:'productno'}, // 產品編號
                        {label:$filter('translate')('B1401.queryList.product_ver'), code:'productversion'}, // 產品版本
                        {label:$filter('translate')('common.queryList.item_n'), code:'productname'}, // 產品名稱
                        {label:$filter('translate')('common.queryList.item_spec'), code:'itemspec'}, // 產品規格
                        {label:$filter('translate')('B1401.queryList.group_label_no'), code:'grouplabelno'}, // 群組標籤編號
                        {label:$filter('translate')('B1401.queryList.group_label_name'), code:'grouplabelno'} // 群組標籤名稱
                    ],
                    query: function(conditions, feedback){
                        packageLevelInfoGet(function(response){
                            feedback(response);
                        });
                    },
                    selectCode: $scope.stationPackage.product_no_index,
                    confirm: function(selectItem, dialog){
                        $scope.stationPackage.product_no_index = selectItem.product_no_index; // 產品編號索引 → 目前包裝來源開窗這裡的資料重複性都太高，所以加上一個索引區分用
                        $scope.stationPackage.product_no = selectItem.productno; // 產品編號
                        $scope.stationPackage.product_ver = selectItem.productversion; // 產品版本
                        $scope.stationPackage.product_name = selectItem.productname; // 產品名稱
                        $scope.stationPackage.product_spec = selectItem.itemspec; // 產品規格
                        $scope.stationPackage.group_label_no = selectItem.grouplabelno; // 組合標籤編號	
                        $scope.stationPackage.group_label_name = selectItem.grouplabelno; // 組合標籤名稱

                        $scope.stationPackage.package_level = ''; // 包裝層數
                        $scope.stationPackage.package_name = ''; // 包裝名稱
                        $scope.stationPackage.package_description = ''; // 包裝描述
                        $scope.stationPackage.package_content = ''; // 包裝內容物名稱
                        $scope.stationPackage.package_qty = ''; // 包裝數
                        $scope.stationPackage.package_rule = ''; // 包裝序號規則
                        $scope.stationPackage.label_no = ''; // 標籤編號

                        $scope.lotNoList = []; // 生產批號 List (左下)
                        $scope.isSelectItem = false; // 是否已點選生產批 → 顯示右邊掃描區塊
                        $scope.pcs_detail = []; // 掃描序號 List (右上)
                        $scope.packageBoxList = []; // 包裝序號 List (右下)
                        $scope.loadPackageLevel(); // 包裝階層開窗
                        dialog.hide();
                    }
                });
            }
        };

        // 取得包裝來源資料
        function packageLevelInfoGet(callback){
            $MMWService.pageNumberInfoGet({
                page_mode : 'package_source_info',
                query_condition_info : [
                    {column_name: 'a.AREANO', query_mode:'0', value: $scope.settingList.area_no, merge_condition_model:'AND'},
                    {column_name: 'a.OPNO', query_mode:'0', value: $scope.settingList.op_no, merge_condition_model:'AND'}
                ]
            }, function (response) {
                if(response && response.length > 0){
                    for(var i = 0; i < response.length; i++){
                        // 目前包裝來源開窗這裡的資料重複性都太高，所以加上一個產品編號索引區分用
                        response[i].product_no_index = i.toString();
                    }
                }
                callback(response);
            });
        }

        // 包裝階層開窗
        $scope.loadPackageLevel = function(){
            if(!$scope.stationPackage.product_no){ // 產品編號
                // 請先選擇包裝來源！
                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column4'));
            } else {
                $MMWService.showQueryListPNIG({
                    page_mode: 'package_label_info',
                    header: [
                        {label:$filter('translate')('B1401.queryList.package_level'), code:'packlevelseq'}, // 包裝層數
                        {label:$filter('translate')('B1401.queryList.package_name'), code:'levelname'}, // 包裝名稱
                        {label:$filter('translate')('B1401.queryList.package_description'), code:'leveldesc'}, // 包裝描述
                        {label:$filter('translate')('B1401.queryList.package_content'), code:'prelevelname'}, // 包裝內容物名稱
                        {label:$filter('translate')('B1401.queryList.package_qty'), code:'levelqty'}, // 包裝數
                        {label:$filter('translate')('B1401.queryList.package_rule'), code:'serialtypeno'}, // 包裝序號規則
                        {label:$filter('translate')('B1401.queryList.label_no'), code:'labelno'} // 標籤編號
                    ],
                    setCondition:function(conditions){
                        conditions.push({column_name: 'a.GroupLabelNO', query_mode:'0', value: $scope.stationPackage.group_label_no, merge_condition_model:'AND' });
                        return conditions;
                    },
                    selectCode: $scope.stationPackage.package_level,
                    confirm : function(selectItem){
                        $scope.stationPackage.package_level = selectItem.packlevelseq.split('0')[1]; // 包裝層數 → 後台傳回 01，但前台需顯示 1，以此類推
                        $scope.stationPackage.package_name = selectItem.levelname; // 包裝名稱
                        $scope.stationPackage.package_description = selectItem.leveldesc; // 包裝描述
                        $scope.stationPackage.package_content = selectItem.prelevelname; // 包裝內容物名稱
                        $scope.stationPackage.package_qty = selectItem.levelqty; // 包裝數
                        $scope.stationPackage.package_rule = selectItem.serialtypeno; // 包裝序號規則
                        $scope.stationPackage.label_no = selectItem.labelno; // 標籤編號

                        if(!$scope.stationPackage.package_content){
                            if($scope.settingList.package_mode === '0'){ // 0: 成品序號模式
                                // 如果包裝階層是第一層的話，包裝內容顯示序號
                                $scope.stationPackage.package_content = $filter('translate')('B1401.serial_no');
                            } else { // 1: 生產批號模式
                                // 如果包裝階層是第一層的話，包裝內容顯示生產批號
                                $scope.stationPackage.package_content = $filter('translate')('B1401.lot_no');
                            }
                        }

                        package_info_get(); // 取得生產批號資訊
                    }
                });

                // 假資料
                // $scope.$root.showQueryList({
                //     key:'packlevelseq',
                //     header : [
                //         {label:$filter('translate')('B1401.queryList.package_level'), code:'packlevelseq'}, // 包裝層數
                //         {label:$filter('translate')('B1401.queryList.package_name'), code:'levelname'}, // 包裝名稱
                //         {label:$filter('translate')('B1401.queryList.package_description'), code:'leveldesc'}, // 包裝描述
                //         {label:$filter('translate')('B1401.queryList.package_content'), code:'prelevelname'}, // 包裝內容物名稱
                //         {label:$filter('translate')('B1401.queryList.package_qty'), code:'levelqty'}, // 包裝數
                //         {label:$filter('translate')('B1401.queryList.package_rule'), code:'serialtypeno'}, // 包裝序號規則
                //         {label:$filter('translate')('B1401.queryList.label_no'), code:'labelno'} // 標籤編號
                //     ],
                //     query: function(conditions, feedback){
                //         feedback([
                //             {
                //                 packlevelseq: "01",				
                //                 levelname: "TBOX",
                //                 leveldesc: "描述",				
                //                 prelevelname: "內容物",					
                //                 levelqty: "50",					                      
                //                 serialtypeno: "SBOX_CODE",		
                //                 labelno: "012"
                //             }
                //         ]);
                //     },
                //     selectCode: $scope.stationPackage.package_level,
                //     confirm: function(selectItem, dialog){
                //         $scope.stationPackage.package_level = selectItem.packlevelseq; 
                //         $scope.stationPackage.package_name = selectItem.levelname; 
                //         $scope.stationPackage.package_description = selectItem.leveldesc;
                //         $scope.stationPackage.package_content = selectItem.prelevelname; 
                //         $scope.stationPackage.package_qty = selectItem.levelqty; 
                //         $scope.stationPackage.package_rule = selectItem.serialtypeno; 
                //         $scope.stationPackage.label_no = selectItem.labelno; 
                //         package_info_get();
                //         dialog.hide();
                //     }
                // });
            }
        };

        // 取得生產批號資訊
        function package_info_get(index){

            var content = {
                query_condition: {
                    area_no: $scope.settingList.area_no,
                    op_no: $scope.settingList.op_no,
                    product_no: $scope.stationPackage.product_no,
                    product_ver: $scope.stationPackage.product_ver,
                    box_level: $scope.stationPackage.package_level,
                    acc: $scope.stationPackage.user_no
                }
            };

            $MMWService.sendToServer({
                uri: 'ServicesSTD.Module_CRAFT.package_info_get',
                content: content,
                success: function (data) {
                    // 假資料
                    // data = {
                    //     package_lot_info : [
                    //         {
                    //             lot_no: "MO009071-0001",    //生產批號
                    //             qty: 280.0000,       //生產批進站數量
                    //             product_no: "0904P01",    //產品編號
                    //             product_ver: "1",      //產品版本
                    //             product_name: "0904P01(序列号管理)", //產品名稱
                    //             item_spec: "",      //規格
                    //             customer_no: "",      //客戶編號
                    //             customer_name: "",     //客戶名稱
                    //             mo_type_no: "0",      //工單類型
                    //             group_label_no: "0910",    //包裝群組標籤編號
                    //             group_label_name: "阿里云",   //包裝群組標籤名稱
                    //             packed_qty: 0.0,      //已包裝數量
                    //             plan_qty: 10.0000,     //派工數量
                    //             query_sql: null
                    //         },
                    //         {
                    //             lot_no: "MO009071-00012",    //生產批號
                    //             qty: 20.0000,       //生產批進站數量
                    //             product_no: "0904P01",    //產品編號
                    //             product_ver: "1",      //產品版本
                    //             product_name: "0904P01(序列号管理)", //產品名稱
                    //             item_spec: "",      //規格
                    //             customer_no: "",      //客戶編號
                    //             customer_name: "",     //客戶名稱
                    //             mo_type_no: "0",      //工單類型
                    //             group_label_no: "0910",    //包裝群組標籤編號
                    //             group_label_name: "阿里云",   //包裝群組標籤名稱
                    //             packed_qty: 0.0,      //已包裝數量
                    //             plan_qty: 10.0000,     //派工數量
                    //             query_sql: null
                    //         },
                    //     ],
                    //     package_box_info : [
                    //         {
                    //             pack_date: "2020-10-19 07:11:00",  //包裝日期
                    //             box_no: "B1",       //包裝編號
                    //             product_no: "0904P01",    //產品編號
                    //             product_ver: "1",      //產品版本
                    //             product_name: "0904P01(序列号管理)", //產品名稱
                    //             item_spec: "",      //產品規格
                    //             box_qty: 5.0,       //包裝限制數量
                    //             actual_qty: 5.0,      //實際包裝數量
                    //             box_level: 1,       //包裝階層
                    //             label_no: null,      //標籤號碼
                    //             serial_type_no: null,     //包裝規則編號
                    //             op_no: "0904OP01",     //作業站
                    //             area_no: "0904QY02",     //產線編號
                    //             pack_user: "DS",      //包裝人員 
                    //             query_sql: null
                    //         },
                    //         {
                    //             pack_date: "2020-10-19 07:11:00",  //包裝日期
                    //             box_no: "B1",       //包裝編號
                    //             product_no: "0904P01",    //產品編號
                    //             product_ver: "1",      //產品版本
                    //             product_name: "0904P01(序列号管理)", //產品名稱
                    //             item_spec: "",      //產品規格
                    //             box_qty: 5.0,       //包裝限制數量
                    //             actual_qty: 5.0,      //實際包裝數量
                    //             box_level: 1,       //包裝階層
                    //             label_no: null,      //標籤號碼
                    //             serial_type_no: null,     //包裝規則編號
                    //             op_no: "0904OP01",     //作業站
                    //             area_no: "0904QY02",     //產線編號
                    //             pack_user: "DS",      //包裝人員 
                    //             query_sql: null
                    //         },
                    //         {
                    //             pack_date: "2020-10-19 07:11:00",  //包裝日期
                    //             box_no: "B1",       //包裝編號
                    //             product_no: "0904P01",    //產品編號
                    //             product_ver: "1",      //產品版本
                    //             product_name: "0904P01(序列号管理)", //產品名稱
                    //             item_spec: "",      //產品規格
                    //             box_qty: 5.0,       //包裝限制數量
                    //             actual_qty: 5.0,      //實際包裝數量
                    //             box_level: 1,       //包裝階層
                    //             label_no: null,      //標籤號碼
                    //             serial_type_no: null,     //包裝規則編號
                    //             op_no: "0904OP01",     //作業站
                    //             area_no: "0904QY02",     //產線編號
                    //             pack_user: "DS",      //包裝人員 
                    //             query_sql: null
                    //         },
                    //     ]
                    // }

                    if(data && typeof(data) === 'object'){
                        if(data.package_lot_info && data.package_lot_info.length > 0){

                            $scope.lotNoList = data.package_lot_info; // 生產批號 List (左下)
                            $scope.pcs_detail = []; // 掃描序號 List (右上)
                        
                            if(data.package_box_info && data.package_box_info.length > 0){
                                $scope.packageBoxList = data.package_box_info; // 包裝序號 List (右下)
                            } else {
                                $scope.packageBoxList = [];
                            }

                            if($scope.settingList.package_mode === '1'){ // 1: 生產批號模式
                                $scope.barcode_lot_no_qty = 0; // 生產批號模式的已包裝數量
                            }

                            $scope.selectItem = $scope.lotNoList[index || 0]; // 右上區塊序號刷滿時，會自動送服務給後台產生包裝序號，所以會需要重新定位已點擊的生產批號索引(左下)，預設為第一筆生產批號
                            $scope.user_packed_qty = +$scope.lotNoList[index || 0].packed_qty; // 雖然右上區塊序號刷滿時，會重新刷新服務取得已包數量，但在序號還沒刷滿前，需要自行計算使用者的目前已包數量，避免與後台帶回來的已包數量搞混
                            $scope.isSelectItem = true; // 是否已點選生產批 → 顯示右邊掃描區塊
                            
                            $timeout(function(){
                                $scope.input_blur(); // 序號掃描定位
                            });
                        } else {
                            $scope.lotNoList = [];
                        }
                    } else {
                        $scope.$root.showAlert($filter('translate')('common.msg.no_data'));
                    }
                }
            });
        }

        // 切換生產批號
        $scope.changeLotNo = function(item, index){
            $scope.selectItem = item; // 點擊的生產批號
            $scope.selectIndex = index; // 點擊的生產批號索引
            $scope.user_packed_qty = +$scope.selectItem.packed_qty; // 雖然右上區塊序號刷滿時，會重新刷新服務取得已包數量，但在序號還沒刷滿前，需要自行計算使用者的目前已包數量，避免與後台帶回來的已包數量搞混
        }

        // QRCODE掃描
        $scope.qrcodeScan = function(){
            $scope.$root.OpenScanner({
                after : function(result){
                    if($scope.settingList.package_mode === '0'){ // 0: 成品序號模式
                        $scope.barcode_serial_no = result.text;
                    } else { // 1: 生產批號模式
                        $scope.barcode_lot_no = result.text;
                    }
                    barcodeScanCallback(); // 掃描序號
                },
                exception: function(){
                    //目前裝置無法使用相機
                    $scope.$root.showAlert($filter('translate')('B0214.showAlert.column3'));
                },
                orientation : 'landscape'
            });
        }

        // 掃描序號
        $scope.barcodeScan = function(event){
            if(event.keyCode == '13'){
                barcodeScanCallback();
                // 20211118 modify by chenshibo for#103337：有报错条码需要清空
                if ($scope.settingList.package_mode === '0') {
                    $scope.barcode_serial_no = '';
                }
                else {
                    $scope.barcode_lot_no = ''
                }
            }
        }


        // 包裝明細
        $scope.showDetail = function (item) {
            var dataList = [];
            $MMWService.sendToServer({
                uri: 'ServicesSTD.Module_CRAFT.package_box_no_detail_info_get',
                content: { box_no: item.box_no, box_level: item.box_level },
                success: function (data) {
                    if (data.dataList && data.dataList.length > 0) {
                        dataList = data.dataList;//data.dataList
                        $scope.isSelectAll = false;
                        $mdDialog.dialog(
                            'module/moduleB/program/B14/showDetail.html',
                            function (dialog) {
                                return {
                                    css_url: 'module/moduleB/program/B14/showDetail.css',
                                    item: item,
                                    itemList: dataList,
                                    back: function () {
                                        dialog.hide();
                                    },
                                    close: function () {
                                        dialog.hide();
                                    },
                                    PageConfig: {
                                        page: 0,
                                        page_count: 25
                                    },
                                    filterItem: [],
                                    getPages: function(list, PageConfig, filterItem) {
                                        if (list) {
                                            var temp_list = list.filter(function (item, index, array) {
                                                var isOK = true,
                                                    keys = Object.keys(filterItem);
                                                for (var i = 0; i < keys.length; i++) {
                                                    var key = keys[i];
                                                    if (isOK && item[key] != null && filterItem[key] && filterItem[key] != '') {
                                                        if (item[key].indexOf(filterItem[key]) == -1) {
                                                            isOK = false;
                                                            break;
                                                        }
                                                    }
                                                }
                                                return isOK;
                                            });
                                            if (PageConfig) {
                                                PageConfig.total_page = Math.ceil(temp_list.length / PageConfig.page_count) || 1;
                                                if (PageConfig.page >= PageConfig.total_page) {
                                                    PageConfig.page = 0;
                                                }
                                                var index = PageConfig.page * PageConfig.page_count;
                                                return temp_list.slice(index, index + PageConfig.page_count);
                                            } else {
                                                return temp_list;
                                            }
                                        } else {
                                            return list;
                                        }
                                    }
                                };
                            }
                        );
                    } else {
                        $scope.isSelectAll = false;
                        $scope.$root.showAlert($filter('translate')('common.msg.no_data'));
                    };
                }
            });
        }

        // 掃描序號 callback
        function barcodeScanCallback(barcode_lot_no, type){

            var barcode = ''; // 刷入的序號

            // 序號基礎卡控
            if($scope.settingList.package_mode === '0'){ // 0: 成品序號模式
                if(!$scope.barcode_serial_no){
                    // 請輸入序號！
                    return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column7'), options);
                } else {
                    barcode = $scope.barcode_serial_no;
                }
            } else { // 1: 生產批號模式
                if(type === 'lotNoPackageBtn'){ // lotNoPackageBtn → 點擊生產批包裝按鈕進行包裝
                    barcode = barcode_lot_no;
                } else {
                    if(!$scope.barcode_lot_no){
                        // 請輸入序號！
                        return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column7'), options);
                    } else {
                        // 因為生產批號模式第一層刷入的會是生產批號，所以需要卡控刷入的生產批號需要跟點擊的那筆生產批號一樣
                        if($scope.stationPackage.package_level === '1'){
                            if($scope.selectItem.lot_no !== $scope.barcode_lot_no){
                                // 查無此生產批，請重新確認
                                // 20211118 modify by chenshibo for#103337：增加报错条码提示
                                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column16', { lotno: $scope.barcode_lot_no }), options);
                            }
                        }
                        barcode = $scope.barcode_lot_no;      
                    }
                }
            }

            // 檢查序號是否有重複掃描
            var isRepeat = false;
            if($scope.settingList.package_mode === '0'){ // 0: 成品序號模式
                for(var i = 0; i < $scope.pcs_detail.length; i++){
                    if(barcode == $scope.pcs_detail[i].barcode_serial_no){
                        isRepeat = true;
                        break;
                    }
                }
            } else { // 1: 生產批號模式
                for(var i = 0; i < $scope.pcs_detail.length; i++){
                    if(barcode == $scope.pcs_detail[i].barcode_lot_no){
                        isRepeat = true;
                        break;
                    }
                }
            }
            if(isRepeat){
                // 序號重複！
                // 20211118 modify by chenshibo for#103337：增加报错条码提示
                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column11', { pcsno: barcode }), options);
            }

            // 檢查刷入的序號是否存在
            package_check_info_get(barcode);
        }

        // 檢查刷入的序號是否存在
        function package_check_info_get(barcode) {

            var content = {
                area_no: $scope.settingList.area_no,
                op_no: $scope.settingList.op_no,
                box_level: $scope.stationPackage.package_level,
                package_no: barcode,
                lot_no: $scope.selectItem.lot_no,
                package_mode: $scope.settingList.package_mode,
                product_no: $scope.stationPackage.product_no,
                product_ver: $scope.stationPackage.product_ver,
                group_label_no: $scope.stationPackage.group_label_no
            };

            $MMWService.sendToServer({
                uri: 'ServicesSTD.Module_CRAFT.package_check_info_get',
                content: content,
                success: function (data) {

                    // 假資料
                    // data = {
                    //     is_pass: true
                    // };

                    if(data && typeof(data) === 'object'){
                        if (data.is_pass) {
                            // 20211207 modify by chenshibo for#103827：刷码过快还是会偶发刷入重复的现象，后端服务检核完成，写入数组前再做一次重复检核
                            var isRepeatagain = false;
                            if ($scope.settingList.package_mode === '0') { // 0: 成品序號模式
                                for (var i = 0; i < $scope.pcs_detail.length; i++) {
                                    if (barcode == $scope.pcs_detail[i].barcode_serial_no) {
                                        isRepeatagain = true;
                                        break;
                                    }
                                }
                            } else { // 1: 生產批號模式
                                for (var i = 0; i < $scope.pcs_detail.length; i++) {
                                    if (barcode == $scope.pcs_detail[i].barcode_lot_no) {
                                        isRepeatagain = true;
                                        break;
                                    }
                                }
                            }
                            if (isRepeatagain) {
                                // 序號重複！
                                // 20211118 modify by chenshibo for#103337：增加报错条码提示
                                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column11', { pcsno: barcode }), options);
                            }
                            else {
                                if ($scope.settingList.package_mode === '0') { // 0: 成品序號模式
                                    serialNoBarcodeScan(barcode); // 成品序號模式掃描
                                } else { // 1: 生產批號模式
                                    if ($scope.stationPackage.package_level === '1') {
                                        lotNoBarcodeScanOne(barcode); // 生產批號模式 → 包裝階層是第一層時，只能掃描生產批號
                                    } else {
                                        lotNoBarcodeScan(barcode); // 生產批號模式掃描
                                    }
                                }
                            }
                        } else {
                            // 序號刷入失敗，請重新檢查序號！
                            // 20211118 modify by chenshibo for#103337：增加报错条码提示
                            $scope.$root.showAlert($filter('translate')('B1401.showAlert.column5', { pcsno: barcode }), options);
                        }
                    }
                },
                error: function (data) {
                    // 20211118 modify by chenshibo for#103337：报错信息不会消失，一直显示在画面上
                    $scope.$root.showAlert(barcode + data.Message, options);
                }
            });
        }

        // 成品序號模式掃描
        function serialNoBarcodeScan(barcode){
            pcsDetailAdd(barcode, $scope.barcode_lot_no, 'serialNo'); // 判斷是否加入掃描序號 List (右上)
        }

        // 生產批號模式掃描
        function lotNoBarcodeScan(barcode){
            pcsDetailAdd($scope.barcode_serial_no, barcode, 'lotNo'); // 判斷是否加入掃描序號 List (右上)
        }

        // 判斷是否加入掃描序號 List (右上)
        function pcsDetailAdd(barcode_serial_no, barcode_lot_no, type) {
            if(+$scope.pcs_detail.length <= +$scope.stationPackage.package_qty){ // 掃描序號 List總數 (右上) < 包裝數
                $scope.pcs_detail.push({
                    index: $scope.pcs_detail.length + 1, // 索引
                    barcode_serial_no: barcode_serial_no, // 成品序號
                    barcode_lot_no: barcode_lot_no, // 生產批號(序號)
                    selected_lot_no: $scope.selectItem.lot_no, // 綁定的生產批號
                    qty: 1, // 數量
                    order: new Date() // 控制掃描順序
                });

                if(type === 'serialNo'){ // serialNo: 成品序號模式
                    $scope.barcode_serial_no = '';
                } else { // lotNo: 生產批號模式
                    $scope.barcode_lot_no = '';
                    $scope.barcode_lot_no_qty++; // 生產批號模式的已包裝數量
                }
            } else {
                return;
            }

            if(+$scope.pcs_detail.length === +$scope.stationPackage.package_qty){ // 掃描序號 List總數 (右上) === 包裝數
                package_info_process(); // 產生包裝序號
                if(type === 'lotNo'){ // lotNo: 生產批號模式
                    $scope.barcode_lot_no_qty = 0; // 生產批號模式的已包裝數量
                }
            }
        }

        // 掃描生產批號(生產批號模式的包裝階層是第一層時，只能刷入生產批號)
        function lotNoBarcodeScanOne(lot_no){
            var not_packed_qty = +$scope.selectItem.qty - +$scope.user_packed_qty; // 尚未包裝數 = 進站數量 - 使用者目前已包數量
            if(+not_packed_qty > 0){ // 尚未包裝數 > 0
                var qty = 0,
                    package_qty = +$scope.stationPackage.package_qty; // 包裝數

                if($scope.pcs_detail.length > 0) { // 判斷是否已輸入序號
                    package_qty -= +$scope.pcs_detail.length; // 包裝數 -= 目前已輸入序號數量
                }
                
                if(+package_qty <= +not_packed_qty){ // 包裝數 <= 尚未包裝數
                    qty = package_qty; // 包裝數
                    $scope.user_packed_qty += +package_qty; // 使用者目前已包數量 += 包裝數
                    $scope.barcode_lot_no_qty += +package_qty; // 生產批號模式的已包裝數量 += 包裝數
                } else { // 包裝數 > 尚未包裝數
                    qty = not_packed_qty; // 尚未包裝數
                    $scope.user_packed_qty += +not_packed_qty; // 使用者目前已包數量 += 尚未包裝數
                    $scope.barcode_lot_no_qty += +not_packed_qty; // 生產批號模式的已包裝數量 += 尚未包裝數
                }

                $scope.pcs_detail.push({
                    index: $scope.pcs_detail.length + 1, // 索引
                    barcode_serial_no: $scope.barcode_serial_no, // 成品序號
                    barcode_lot_no: lot_no, // 生產批號(序號)
                    selected_lot_no: $scope.selectItem.lot_no, // 綁定的生產批號
                    qty: qty, // 數量
                    order: new Date() // 控制掃描順序
                });

                $scope.barcode_lot_no = '';
            } else {
                // 包裝數已滿，無法包裝！
                return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column10'));
            }

            if(+$scope.barcode_lot_no_qty === +$scope.stationPackage.package_qty){ // 生產批號模式的已包裝數量 === 包裝數
                package_info_process(); // 產生包裝序號
                // 20210409 modify by 奕達 for M#89318 : 包裝數量計算錯誤
                //$scope.barcode_lot_no_qty = 0; // 生產批號模式的已包裝數量
            }
        }

        // 產生包裝序號
        function package_info_process(){

            var package_no_list = [];

            if($scope.pcs_detail && $scope.pcs_detail.length > 0){
                for(var i = 0; i < $scope.pcs_detail.length; i++){
                    if($scope.settingList.package_mode === '0'){  // 0: 成品序號模式
                        package_no_list.push({
                            package_no: $scope.pcs_detail[i].barcode_serial_no,
                            package_qty: $scope.pcs_detail[i].qty
                        });
                    } else { // 1: 生產批號模式
                        package_no_list.push({
                            package_no: $scope.pcs_detail[i].barcode_lot_no,
                            package_qty: $scope.pcs_detail[i].qty
                        });
                    }
                }
            }

            var content = {
                package_mode: $scope.settingList.package_mode,      // 模式 0 = 刷成品序號 1 = 刷生產批號 
                group_label_no: $scope.stationPackage.group_label_no,    // 包裝群標籤組編號
                box_level: $scope.stationPackage.package_level,      // 包裝階層
                package_qty: $scope.stationPackage.package_qty,      // 包裝數(多少包成一箱)
                lot_no: $scope.selectItem.lot_no,    // 生產批號
                area_no: $scope.settingList.area_no,      // 生產線編號
                op_no: $scope.settingList.op_no,      // 作業站編號
                product_no: $scope.stationPackage.product_no,     // 產品編號
                product_ver: $scope.stationPackage.product_ver,      // 產品版本 
                package_no_list: package_no_list.reverse(),  //包裝編號 list [編號 AND 數量]
                user_acc: $scope.stationPackage.user_no       // 人員帳號
            };
            //判斷是否開啟外部條碼式  1 = 有(需開窗刷入條碼) 
            if($scope.settingList.external_mode == '1')
            {
                //有(需開窗刷入條碼)
                $scope.open_external_box_no_contorl(function(external_barcode){
                    if(external_barcode.trim() == '')
                        return $scope.$root.showAlert($filter('translate')('B1401.showAlert.column28'));
                    content.external_barcode = external_barcode;
                    $MMWService.sendToServer({
                            uri: 'ServicesSTD.Module_CRAFT.package_info_process',
                            content: content,
                            success: function (data, response) {
                                $scope.$root.showToast($filter('translate')('B1401.showAlert.column8')); // 序號包裝成功！
                                $scope.pcs_detail = []; // 掃描序號 List (右上)
                                package_info_get($scope.selectIndex); // 刷新生產批號 List資料 (左下)
                                $scope.print(data.box_no); // 序號成功包裝後，直接列印
                            }
                    });
                });
            }
            else
            {
                //沒有(直接送出包裝)
                $MMWService.sendToServer({
                    uri: 'ServicesSTD.Module_CRAFT.package_info_process',
                    content: content,
                    success: function (data, response) {
                        $scope.$root.showToast($filter('translate')('B1401.showAlert.column8')); // 序號包裝成功！
                        $scope.pcs_detail = []; // 掃描序號 List (右上)
                        package_info_get($scope.selectIndex); // 刷新生產批號 List資料 (左下)
                        $scope.print(data.box_no); // 序號成功包裝後，直接列印
                    }
                });
            }
        }

        // 刪除序號
        $scope.pcs_remove = function(item){
            // 是否確定要刪除序號？
            $scope.$root.showConfirm($filter('translate')('B1401.showAlert.column14'), function(dialog){

                $scope.pcs_detail.splice($scope.pcs_detail.indexOf(item), 1);

                $scope.user_packed_qty -= +item.qty; // 使用者目前已包數量 -= 刪除的序號的數量
                
                if($scope.settingList.package_mode === '1'){ // 1: 生產批號模式
                    $scope.barcode_lot_no_qty -= +item.qty; // 生產批號模式的已包裝數量 -= 刪除的序號的數量
                }

                dialog.hide();
            });
        };

        // 選擇包裝序號(單選)
        $scope.boxList_select = function(item){
            for(var i = 0; i < $scope.packageBoxList.length; i++){
                $scope.packageBoxList[i].selected = false;
            }

            item.selected = !item.selected;
        };

        // 刪除包裝序號
        $scope.boxList_remove = function(item){
            // 是否確定要刪除包裝序號，會解綁所有序號！
            $scope.$root.showConfirm($filter('translate')('B1401.showAlert.column6'), function(dialog){
                
                var content = {
                    box_no: item.box_no,
                    box_level: $scope.stationPackage.package_level
                };
    
                $MMWService.sendToServer({
                    uri: 'ServicesSTD.Module_CRAFT.package_del_process',
                    content: content,
                    success: function (data) {
                        if(data && typeof(data) === 'object'){
                            $scope.packageBoxList.splice($scope.packageBoxList.indexOf(item), 1);
                            $scope.$root.showToast($filter('translate')('common.msg.success'));
                            package_info_get($scope.selectIndex); // 刷新生產批號 List資料 (左下)
                            dialog.hide();
                        }
                    }
                });
            });
        }

        // 生產批包裝按鈕
        $scope.pcs_package = function(){
            // 生產批號模式的包裝階層需要是第一層，才能使用此按鈕
            if($scope.settingList.package_mode === '1' && $scope.stationPackage.package_level === '1'){ 
                barcodeScanCallback($scope.selectItem.lot_no, 'lotNoPackageBtn'); // 掃描序號(生產批)
            } else {
                // 包裝階層不在第一層，不能使用包裝功能！
                $scope.$root.showAlert($filter('translate')('B1401.showAlert.column9'));
            }
        };

        // 清除按鈕
        $scope.pcs_confirm = function(){
            if($scope.pcs_detail && $scope.pcs_detail.length > 0){
                // 是否確定清除所有序號？
                $scope.$root.showConfirm($filter('translate')('B1401.showAlert.column15'), function(dialog){
                    $scope.pcs_detail = []; // 掃描序號 List (右上)
                    package_info_get($scope.selectIndex); // 刷新生產批號 List資料 (左下)
                    dialog.hide();
                });  
            } else {
                // 尚未有任何序號，無法使用！
                $scope.$root.showAlert($filter('translate')('B1401.showAlert.column17'));
            }
        };

        // 強制封箱按鈕
        $scope.pcs_mandatory_package = function(){
            if($scope.pcs_detail && $scope.pcs_detail.length > 0){
                package_info_process(); // 產生包裝序號
            } else {
                // 尚未有任何序號，無法使用！
                $scope.$root.showAlert($filter('translate')('B1401.showAlert.column17'));
            }
        };

        // 補印按鈕
        $scope.print = function (box_no) {

            var content = {
                box_no: '',
                box_level: $scope.stationPackage.package_level
            };

            if(!box_no){
                // 檢查是否有勾選一筆包裝序號
                for(var i = 0; i < $scope.packageBoxList.length; i++){
                    if($scope.packageBoxList[i].selected){
                        content.box_no = $scope.packageBoxList[i].box_no;
                        break;
                    }
                }
            } else {
                // 序號刷滿並成功生成包裝序號後，直接列印
                content.box_no = box_no;
            }

            printDataProcess(content); // 打印服務
        };

        // 打印服務
        var pdf_url;
        function printDataProcess(content){
            $MMWService.sendToServer({
                uri: 'ServicesSTD.Module_CRAFT.package_box_no_print_process',
                content : content,
                success : function(data){
                    if(data && typeof(data) === 'object'){
                        if(data.has_url){
                            // 刷新包装列表
                            // 20211115 modify by chenshibo for#102910: 上线客户白马反馈:包装作业对当前生产批自动打印完一个托标签之后，生产批就会自动跳转选中最上面一个生产批，导致还需要人为再次手动选择生产批
                            package_info_get($scope.selectIndex); // 刷新生產批號 List資料 (左下)

                            // 執行標籤列印 
                            if(data.command_lines) {
                                var command_lines = [];
                                command_lines.push(data.command_lines);
                                printTag(command_lines, 0);
                            } 

                            // 執行 PDF列印
                            if(data.run_card_pdf_url && data.run_card_pdf_url.length > 0) {
                                pdf_url = data.run_card_pdf_url;
                                if(pdf_url.indexOf('http://') == -1){
                                    pdf_url = 'http://'+config.server.ip+':'+config.server.port+ pdf_url;
                                }

                                // sMES內建列印功能只有 Windows用戶可以使用
                                if(window.nodeRequire){
                                    // 規格需要不跳 iframe，並直接列印，但只有 Windows用戶可以
                                    printDirectly(pdf_url);
                                } else {
                                    // 所以不是 Windows用戶的話，就需要跳 iframe，並使用電腦內建列印功能
                                    showPDFViewer(pdf_url);
                                }
                            }
                        } else {
                            $scope.$root.showAlert($filter('translate')('common.msg.no_data'));
                        }
                    }
                }
            });
        };

        // 標籤列印
        function printTag(commandLines, index){
            if(commandLines && index < commandLines.length){
                if(window.nodeRequire){
                    var exec = window.nodeRequire('child_process').exec;
                    exec(commandLines[index], function(error, stdout, stderr){
                        if(error){
                            $rootScope.showAlert($filter('translate')('B1201.msg.cantprint'));
                        }
                        index = index +1;
                        printTag(commandLines, index);
                    });
                }
            } 
        };
        
        // 直接打印
        function printDirectly(pdf_url){
            var sumatraPDF = window.nodeRequire('sumatra-pdf');
            if(sumatraPDF){
                var fs = window.nodeRequire('fs'), RuncardPath;
                try{
                    // 20240321 modify by Alan for#159805 : electron升級後，兼容新舊版本
                    const remote = window.nodeRequire('electron').remote || window.nodeRequire('@electron/remote');
                    RuncardPath = remote.app.getAppPath();
                }catch(e){
                    RuncardPath = window.nodeRequire('path').dirname(process.execPath)+'\\package.nw';
                }
                RuncardPath += '\\www\\Runcard';
                if(!fs.existsSync(RuncardPath)){
                    fs.mkdirSync(RuncardPath);
                }

                // 20240222 add by Alan for#158151 : 清除Runcard目錄下未開啟的舊檔案
                // 20240408 modify by Alan for#139948 : 改成同步讀取，避免刪除檔案後立即列印造成找不到檔案
                fs.readdirSync(RuncardPath, (err, files) => {
                    if (err) {
                        console.log(err);
                    }
                    //listing all files using forEach
                    files.forEach((file) => {
                        // Do whatever you want to do with the file
                        fs.unlink(RuncardPath + '/' + file, (err) => {
                            if (err) {
                                console.debug(err);
                            }
                        })
                    });
                })

                // 20240222 add by Alan for#158151 : 增加時間戳記，避免檔名重複造成檔案開啟時無法寫入
                let pdfPath = `${RuncardPath}/RuncardPreview_${Date.now()}.pdf`;
                $scope.$root.downloadFile(pdf_url, pdfPath, function (dist_path) {
                    $scope.$root.showLoading();
                    window.nodeRequire('sumatra-pdf').printWithSettings({
                        path: dist_path,
                        success:function(){
                            $scope.$root.hideLoading();
                            $scope.$root.showToast($filter('translate')('common.msg.success'));
                        },
                        error:function(error){
                            $scope.$root.hideLoading();
                            $scope.$root.showToast($filter('translate')('common.msg.success'));
                            //console.error(error);
                        }
                    });
                });
            } else {
                // 列印出狀況就跳 iframe，並使用電腦內建列印功能
                showPDFViewer(pdf_url);
            }
        }

        function showPDFViewer(pdf_url){
            try{
                window.nodeRequire('nw.gui').Window.open(pdf_url, {
                    title:'PDF Viewer',
                    show: false,
                    icon:'icon/icon.png',
                    focus:true
                }, function(win) {
                    win.on('loaded', function(){
                        win.show();
                        win.print();
                    });
                });
            } catch (e){
                $scope.mode = 'print';
                document.getElementById('kmi-pdf-panel').src = 'JSplugins/pdfjs/web/viewer.html?file='+pdf_url+'&openfile=false&viewbookmark=false&printfile=false&download=false#zoom=page-width';
            }
        }

        // PDF列印
        $scope.PDF_print = function(){
            if(window.nodeRequire){
                var sumatraPDF = window.nodeRequire('sumatra-pdf');
                if(sumatraPDF){
                    var fs = window.nodeRequire('fs'), RuncardPath;
                    try{
                        // 20240321 modify by Alan for#159805 : electron升級後，兼容新舊版本
                        const remote = window.nodeRequire('electron').remote || window.nodeRequire('@electron/remote');
                        RuncardPath = remote.app.getAppPath();
                    }catch(e){
                        RuncardPath = window.nodeRequire('path').dirname(process.execPath)+'\\package.nw';
                    }
                    RuncardPath += '\\www\\Runcard';
                    if(!fs.existsSync(RuncardPath)){
                        fs.mkdirSync(RuncardPath);
                    }

                    // 20240222 add by Alan for#158151 : 清除Runcard目錄下未開啟的舊檔案
                    // 20240408 modify by Alan for#139948 : 改成同步讀取，避免刪除檔案後立即列印造成找不到檔案
                    fs.readdirSync(RuncardPath, (err, files) => {
                        if (err) {
                            console.log(err);
                        }
                        //listing all files using forEach
                        files.forEach((file) => {
                            // Do whatever you want to do with the file
                            fs.unlink(RuncardPath + '/' + file, (err) => {
                                if (err) {
                                    console.debug(err);
                                }
                            })
                        });
                    })

                    // 20240222 add by Alan for#158151 : 增加時間戳記，避免檔名重複造成檔案開啟時無法寫入
                    let pdfPath = `${RuncardPath}/RuncardPreview_${Date.now()}.pdf`;
                    $scope.$root.downloadFile(pdf_url, pdfPath, function (dist_path) {
                        $scope.$root.showLoading();
                        window.nodeRequire('sumatra-pdf').printWithSettings({
                            path: dist_path,
                            success:function(){
                                $scope.$root.hideLoading();
                                $scope.$root.showToast($filter('translate')('common.msg.success'));
                            },
                            error:function(error){
                                $scope.$root.hideLoading();
                                $scope.$root.showToast($filter('translate')('common.msg.success'));
                                //console.error(error);
                            }
                        });
                    });
                } else {
                    window.frames['kmi-pdf-panel'].pdf_print();
                }
            } else {
                window.frames['kmi-pdf-panel'].pdf_print();
            }
        };

        // 下載
        $scope.download = function(){
            window.frames['kmi-pdf-panel'].pdf_download();
        };
        
        // 取消
        $scope.cancel = function(){
            $scope.mode = '';
            document.getElementById('kmi-pdf-panel').src = '';
        };

    }];
});
